package com.aliyun.commons.service;

import java.util.function.Function;

/**
 * 发送消息服务
 *
 * 
 * @date 2024/11/30
 */
public interface SendMessageService {

    /**
     * 发送异步消息
     *
     * @param topic      主题
     * @param tag        标记
     * @param messageKey 消息键
     * @param body       消息内容
     */
    void sendAsyncMessage(String topic, String tag, String messageKey, String body);

    /**
     * 发送交易消息
     *
     * @param topic      主题
     * @param tag        标记
     * @param messageKey 消息键
     * @param body       消息内容
     * @param consumer   消费者
     * @return {@link R }
     * @throws Exception 例外
     */
    <R> R sendTransactionMessage(String topic, String tag, String messageKey, String body,
        Function<String/*messageId*/, R> consumer) throws Exception;
}